\subsubsection{Ambiente 1}
\label{cenario_ambiente1}
Considerando o nsis rodando em todos os nós, a partir do nó QNI, efetuou-se solicitação de reserva de fluxo com o comando:

 \verb|./nsis-qos 192.168.22.12 -res -bw 1024 -min 2024 -o 3 -p 17 -dpt 55555 &|

Neste momento é gerado um fluxo de informações, que podem ser melhores descritas a partir do nó QNI.

\begin{enumerate}
\item o Nó QNI envia um mensagem de reserva;
\item Após recebe uma mensagem NOTIFY confirmando que existe recurso: ``RR supported.``
\item A partir da confirmação o nó QNI envia uma mensagem de resposta RESPONSE para informar o envio do fluxo.
\end{enumerate}

Podemos de modo sequencial ver o conjunto de mensagens e a sequência na figura \ref{fig:cap_cenario_reserve}

\begin{itemize}
 \item QNI sinaliza para QNE;
 \item QNR intermedia e verifica informações;
 \item QNR aloca recursos;
\begin{verbatim}
 Reserving ...
(TC) Running "tc class add dev eth1 parent 1:1 classid 1:6 htb rate 1024bps burst 1024 ceil 1024bps mpu 64"
HTB: quantum of class 10006 is small. Consider r2q change.
(TC) Running "tc qdisc add dev eth1 parent 1:6 handle 6: sfq perturb 10"
(TC) Running "tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.21.10/32 match ip dst 192.168.22.12/32 match ip protocol 17 0xff match ip dport 55555 0xffff  flowid 1:6"
\end{verbatim}
 \item As atualizações de máquina de estado são encaminhadas entre os nós
+++ QSPEC object    : QoS Available
+++ Object type     : Tmod1, length:4
+++ QSPEC object    : Minimum QoS
\item QNR responde a sinalização
\item QNE respode a QNI e reserva recursos.
\end{itemize}

\begin{figure}[!htpb]
 \centering
 \includegraphics[scale=.4]{figs/cenario_reserve1.png}
 \caption{Sinalização de reserva}
 \label{fig:cap_cenario_reserve}
\end{figure}

Após a reserva de recursos, o estado da garantia de recursos se mantém por sinalização de estado, soft-state, gerada de tempos em tempos. Esta mensagem tem o intuito apenas de manter o estado e carrega informações de fonte e destino, ID da reserva e tipo de mensagem. O evento é gerado pelo nó QNI, que ao chegar ao nó QNE chama a função \verb|inst__rx_reserve()|, que compara o identificador da reserva com os atuais, se o valor for o mesmo que o armazenado, a reserva é atualizada. Um modelo pode ser visto abaixo:

\begin{verbatim}
----------------------------------------

QoSFsm: refresh_timeout()

triggerEvent        : ST_INST::EV_TIMEOUT_REFRESH

QoSFsm::inst__timeout_refresh()

QNE: outgoing msg -->
+ SII_Handle        : 
+ srcAddr           : 192.168.21.10
+ destAddr          : 192.168.22.12
+ direction         : DOWNSTREAM
+ msg length        : 16 bytes
+ QoS Message Type  : RESERVE
+ T:R:B:A:P:S-Flag  : 0:0:0:0:0:0
RefrTimer restarted : 30s

transition to       : ST_INST

SID: ffffffff ffffffff ffffffff ffffffff
fsm                 : 0x80f4c28

QNE: --> incoming msg
+ SII_Handle        : 192.168.21.10
+ srcAddr           : 192.168.21.10
+ destAddr          : 192.168.22.12
+ direction         : DOWNSTREAM
+ msg length        : 16 bytes
+ QoS Message Type  : RESERVE
+ T:R:B:A:P:S-Flag  : 0:0:0:0:0:0

triggerEvent        : ST_INST::EV_RX_RESERVE

QoSFsm::inst__rx_reserve()
StateTimer restarted: 100s

transition to       : ST_INST
\end{verbatim}

Para se remover uma reserva, basta utilizar o parâmetro -t, de derrubar (do inglês teardown). O procedimento de remoção de reserva também pode ser feito manualmente, como no exemplo:


\verb|./nsis-qos 192.168.22.12 -rt -bw 1024 -min 2024 -o 3 -p 17 -dpt 55555 &|


Outros meios são a queda de um dos pontos do domínio. A reserva tem um tempo de vida, que é armazenada, caso dentro deste tempo não chegue atualização da reserva, esta é derrubada. 

\begin{verbatim}

SID: ffffffff ffffffff ffffffff ffffffff
fsm                 : 0x80f4c28

QNE: --> incoming msg
+ SII_Handle        : 192.168.21.10
+ srcAddr           : 192.168.21.10
+ destAddr          : 192.168.22.12
+ direction         : DOWNSTREAM
+ msg length        : 24 bytes
+ QoS Message Type  : RESERVE
+ T:R:B:A:P:S-Flag  : 1:0:0:0:0:0

triggerEvent        : ST_INST::EV_RX_RESERVE

QoSFsm::inst__rx_reserve()
StateTimer started  : 30s

transition to       : ST_WR
\end{verbatim}

Novamente a mensagem é recebida, é feita a chamada função \verb|inst__rx_reserve()|, da máquina de estado, verifica o marcador T-FLAG setado, e libera a reserva.

\begin{verbatim}
Refresh Timer stoped
(TC) Running "tc filter delete dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.21.10/32 match ip dst 192.168.22.12/32 match ip protocol 17 0xff match ip dport 55555 0xffff  flowid 1:6"
(TC) Running "tc class delete dev eth1 parent 1:1 classid 1:6"
QoSFsm::wr__rx_rmf_msg()
\end{verbatim}